State 的生命週期是指 StatefuleWidget 中的 State 從創建至消滅中間的過程,在這過程中存在多個不同階段的 Hooks,我們可以在這些接口上實作想要的行為。
從StatefulWidget原始碼追蹤 StatefulWidget 實體化的過程:
StatefulWidget 會先透過 createElement 產生 StatefulElement
StatefulElement 調用 StatefulWidget 的 createState 方法產生對應的 State 物件。State 創建時會去呼叫 initState 方法。
=> 通常會在這個階段進行State資料初始化的動作。
當 StatefulWidget 有使用來自InheritedWidget的資料時會觸發。
=> InheritedWidget 可以讓組件存取來自 Widget Tree 上層定義的資料,因此當上層資料有異動時會觸發這個 hook。
=> 同 StatelessWidget build 方法,用來定義UI的配置設定。
開發中使用 debug 模式時,在觸發 Hot Reload 時會呼叫該函數
=> 可以用來 debug 狀態是否正常。
當呼叫 setState 後,StatefulWidget 內部會檢查是否發生異動並觸發 didUpdateWidget
當組件節點即將被 Element Tree 移除時會被呼叫。
當組件節點被 Element Tree 移除後,若後續沒有確認不會在使用則觸發此方法並釋放占用的資源。
參考《Flutter实战》圖3.2 重新繪制成彩色版

我們可以從昨日的 練習成果 理解整個生命週期的過程。